// system_info.h: Information about the system that was running a program
// when a crash report was produced.
//
// Author: Snox Abbey

#ifndef LONGKEY_BREAKPAD_PROCESSOR_SYSTEM_INFO_H_
#define LONGKEY_BREAKPAD_PROCESSOR_SYSTEM_INFO_H_

#include <string>

namespace longkey_breakpad
{
	using std::string;

	struct SystemInfo
	{
	public:
		SystemInfo() : os(), os_short(), os_version(), cpu(), cpu_info(),
			cpu_count(0) {}

		// Resets the SystemInfo object to its default values.
		void Clear()
		{
			os.clear();
			os_short.clear();
			os_version.clear();
			cpu.clear();
			cpu_info.clear();
			cpu_count = 0;
		}

		// A string identifying the operating system, such as "Windows NT",
		// "Mac OS X", or "Linux".  If the information is present in the dump but
		// its value is unknown, this field will contain a numeric value.  If
		// the information is not present in the dump, this field will be empty.
		string os;

		// A short form of the os string, using lowercase letters and no spaces,
		// suitable for use in a filesystem.  Possible values are "windows",
		// "mac", and "linux".  Empty if the information is not present in the dump
		// or if the OS given by the dump is unknown.  The values stored in this
		// field should match those used by MinidumpSystemInfo::GetOS.
		string os_short;

		// A string identifying the version of the operating system, such as
		// "5.1.2600 Service Pack 2" or "10.4.8 8L2127".  If the dump does not
		// contain this information, this field will be empty.
		string os_version;

		// A string identifying the basic CPU family, such as "x86" or "ppc".
		// If this information is present in the dump but its value is unknown,
		// this field will contain a numeric value.  If the information is not
		// present in the dump, this field will be empty.  The values stored in
		// this field should match those used by MinidumpSystemInfo::GetCPU.
		string cpu;

		// A string further identifying the specific CPU, such as
		// "GenuineIntel level 6 model 13 stepping 8".  If the information is not
		// present in the dump, or additional identifying information is not
		// defined for the CPU family, this field will be empty.
		string cpu_info;

		// The number of processors in the system.  Will be greater than one for
		// multi-core systems.
		int cpu_count;
	};
}

#endif